﻿using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
using DevTeam;


using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.Depo.Aksesuar
{
    public partial class AksesuarAyir : XPopupForm
    {
        private int BrandId { get; set; }
        private string Xml { get; set; }
        private int SezonId { get; set; }
        private string OrderRef { get; set; }

        public AksesuarAyir()
        {
            InitializeComponent();
        }

        public AksesuarAyir(string xml, int BrandId,int SezonId,string OrderRef)
            : this()
        {
            this.Xml = xml;
            this.BrandId = BrandId;
            this.SezonId = SezonId;
            this.OrderRef = OrderRef;
        }
        private void Stok_Load(object sender, EventArgs e)
        {
            gvAksesuarStok.Init("GetAksesuarAyrimlarforPlanlama", Xml, BrandId);
            gvAksesuarStok.AddDetailGrid(gvAksesuarAyrim, "AksesuarId");

            gvAksesuarStok.AddColumn("QtySelected", typeof(int), "Sum(Child({FK}).QtySelected)");

            gvAksesuarAyrim.MakeColumnInvisible("ScA", "AksesuarId", "AyrimId", "HoldFor");

            gvAksesuarStok.FormatAsNumber(0, "ToplamIhtiyac",  "IdleMiktar",  "QtySelected", "EksikMiktar");
            gvAksesuarStok.AddSummary("ToplamIhtiyac", "IdleMiktar", "QtySelected", "EksikMiktar");

            gvAksesuarAyrim.FormatAsNumber(0, "Qty","QtySelected");
            gvAksesuarAyrim.AddSummary("QtySelected");

            gvAksesuarStok.MakeReadOnly();
            gvAksesuarAyrim.MakeReadOnly("QtySelected");

            gvAksesuarAyrim.RowCellStyle += gvAksesuarAyrim_RowCellStyle;
            gvAksesuarAyrim.CellValueChanged += gvAksesuarAyrim_CellValueChanged;
            gvAksesuarStok.RowCellStyle += gvAksesuarStok_RowCellStyle;

            splitContainerControl1.AutoSize(0.6);
            gvAksesuarStok.BestFitColumns();
            gvAksesuarAyrim.BestFitColumns();
        }

        void gvAksesuarStok_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                switch (e.Column.FieldName)
                {
                    case "QtySelected":
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                        return;
                }
            }
        }

        void gvAksesuarAyrim_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                string HoldFor = gvAksesuarAyrim.GetFocusedRowCellValue("HoldFor").ToStr();
                int Qty = gvAksesuarAyrim.GetFocusedRowCellValue("Qty").ToInt();
                int QtySelected = gvAksesuarAyrim.GetFocusedRowCellValue("QtySelected").ToInt();

                if (HoldFor == "")
                {
                    if (QtySelected > Qty)
                    {
                        gvAksesuarAyrim.CellValueChanged -= gvAksesuarAyrim_CellValueChanged;
                        if (XtraMessageBox.Show("Seçebileceğiniz miktar en fazla " + Qty.ToString() + "  adettir.  " + Qty.ToString() + " adet seçmek ister misiniz ?", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                            gvAksesuarAyrim.SetFocusedRowCellValue("QtySelected", Qty);
                        else
                            gvAksesuarAyrim.SetFocusedRowCellValue("QtySelected", null);
                        gvAksesuarAyrim.CellValueChanged += gvAksesuarAyrim_CellValueChanged;
                        return;
                    }
                }
                else
                {
                    gvAksesuarAyrim.CellValueChanged -= gvAksesuarAyrim_CellValueChanged;
                    ShowErrorMessage("Askıda olan aksesuardan istek yapamazsınız !");
                    gvAksesuarAyrim.SetFocusedRowCellValue("QtySelected", null);
                    gvAksesuarAyrim.CellValueChanged += gvAksesuarAyrim_CellValueChanged;
                    return;
                }
            }
        }

        void gvAksesuarAyrim_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                string HoldFor = gvAksesuarAyrim.GetRowCellValue(e.RowHandle, "HoldFor").ToStr();
                switch (e.Column.FieldName)
                {
                    case "QtySelected":
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                        if (HoldFor != "")
                            e.Appearance.ForeColor = Color.Red;
                        return;
                }
            }
        }

        private void bbiAyir_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gvAksesuarAyrim.EndEditing();
            DataRow[] dr = gvAksesuarAyrim.DataTable().Select("Isnull(QtySelected,0) > 0");
            
            if (dr.Length == 0)
            {
                ShowErrorMessage("Lütfen transfer yapacağınız aksesuarları seçin !");
                return;
            }
            else
            {
                DataTable dt = dr.CopyToDataTable();

                string str = string.Empty;

                string xmlSel = dt.Serialize();

                DataTable xBuffer = ExecuteDataTable("AksesuarTransferKontrol",
                    xmlSel,
                    OrderRef,
                    BrandId,
                    SezonId,
                    WhoAmI,
                    false,
                    'A'
                    );

                if (xBuffer.Rows.Count > 0)
                    if (xBuffer.Rows[0]["intVal"].ToInt() > 0)
                    {
                        string oid = string.Empty;
                        foreach (DataRow r in xBuffer.Rows)
                            oid += r["intVal"].ToString() + Environment.NewLine;

                        if (xBuffer.Rows[0]["strVal"].ToString().IsNullOrWhiteSpace())
                            XtraMessageBox.Show("İşleme devam edebilmek için OwnerId'si (sahibi) uyumsuz aksesuarları sepetinizden çıkarmalısınız:\n\n" + oid, "İşlem başarısız");
                        else
                            XtraMessageBox.Show("Yetkili olmadığınız iki depo arasında transfer yapamazsınız. Şu aksesuarlar bu kuralı ihlal ediyor:\n\n" + oid, "İşlem başarısız");

                        return;
                    }
                    else
                        str = "Onay gerektiren aksesuarlar için istek oluşturuldu. Takip için IstekId: " + xBuffer.Rows[0]["strVal"].ToString();

                if (str != string.Empty)
                    XtraMessageBox.Show(str);

                this.DialogResult = DialogResult.OK;
            }
        }
    }
}
